package plp.orientadaObjetos2.comando;

import plp.expressions2.memory.VariavelJaDeclaradaException;
import plp.expressions2.memory.VariavelNaoDeclaradaException;
import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException;
import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException;
import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException;
import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException;
import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException;
import plp.orientadaObjetos1.excecao.execucao.EntradaInvalidaException;

public class ComandoProcessor {
	
	 private ComandoReflectionHandler proximo;
	 private ComandoReflectionHandler primeiro;
	  
	 public ComandoProcessor(){
	 }
	  
	 public void addComandoReflectionHandler(ComandoReflectionHandler comandoReflectionHandler){
	  if(this.primeiro == null){
	   this.primeiro = comandoReflectionHandler;
	  }else{
	   this.proximo.setProximo(comandoReflectionHandler);
	  }
	  this.proximo = comandoReflectionHandler;
	 }
	  
	 public void comandoHandler(ComandoBean comandoBean) throws VariavelNaoDeclaradaException, 
	 VariavelJaDeclaradaException, ClasseNaoDeclaradaException, 
	 ObjetoNaoDeclaradoException, ClasseJaDeclaradaException, 
	 ObjetoJaDeclaradoException, ProcedimentoNaoDeclaradoException, 
	 ProcedimentoJaDeclaradoException, EntradaInvalidaException{
	  primeiro.comandoHandler(comandoBean);
	 }

}
